package com.xiaoc.bulldozer.common.service;

import java.util.List;
import java.util.Set;

import com.xiaoc.bulldozer.common.dto.AwardDto;
import com.xiaoc.bulldozer.common.dto.AwardQueryDto;
import com.xiaoc.bulldozer.common.model.Award;
import org.omg.CORBA.PUBLIC_MEMBER;

/**
 * Award Service 接口
 *
 * @author Danfo Yam
 * @date 2018-08-24 15:47:58
 */
public interface AwardService {

    /**
     * 根据条件查询Award数量
     *
     * @param AwardQueryDto
     * @return 满足查询条件的记录数量
     */
    public Integer getAwardCountByCondition(AwardQueryDto awardQueryDto);

    /**
     * 根据条件分页查询Award列表
     *
     * @param AwardQueryDto
     * @return 满足查询条件的Award列表
     */
    public List<Award> getAwardListByCondition(AwardQueryDto awardQueryDto);

    /**
     * 根据Id获取Award
     *
     * @param id
     * @return Award对象
     */
    public Award getAwardById(Integer id);

    /**
     * 获取所有Award列表
     *
     * @return Award列表
     */
    public List<Award> getAllAwardList();

    /**
     * 新增Award
     *
     * @param award
     * @return void
     */
    public void save(Award award);

    /**
     * 更新Award
     *
     * @param award
     * @return void
     */
    public void update(Award award);

    /**
     * 根据Id删除Award
     *
     * @param id
     * @return void
     */
    public void deleteById(Integer id);


    /**
     * 根据userId和 status获取Award
     *
     * @param userId
     * @param status
     * @return
     */
    public Award getAwardByUserIdAndStatus(Integer userId, Integer status);

    /**
     * 根据userId获取最大轮次
     *
     * @param userId
     * @return 最大轮次值
     */
    public int getMaxRoundCountByUserId(Integer userId);

    /**
     * 根据userId和轮次获取Award列表
     *
     * @param userId
     * @param roundCount
     * @return Award 集合
     */
    public List<Award> getAwardByUserIdAndRoundCount(Integer userId, Integer roundCount);

    /**
     * 获取最近获奖名单
     */
    public List<AwardDto> getRecentAwardList(Integer limit);

    /**
     * 根据id和userId获取红包
     *
     * @param id
     * @param userId
     * @return
     */
    public Award getAwardByIdAndUserId(Integer id, Integer userId);

    /**
     * 根据userId获取最新一次红包记录
     *
     * @param userId
     * @return
     */
    public Award getRecentAwardByUserId(Integer userId);

    /**
     * 根据status获取Award列表
     *
     * @param status
     * @return
     */
    public List<Award> getAwardListByStatus(Integer status);


    /**
     * 更改状态
     *
     * @param status
     * @param awardIds
     */
    public void updateStatusByIds(Integer status, Set<Integer> awardIds);

    /**
     * 获取红包过期时间
     *
     * @return
     */
    public Long getAwardTimeout();


    /**
     * 通过userId roundCount 获取成获得红包次数
     *
     * @param userId
     * @param roundCount
     * @return
     */
    public int getAwardSuccessCountByUserIdAndRoundCount(Integer userId, Integer roundCount);



    /**
     * 通过id,status 获取红包集合
     * @param id
     * @param status
     * @return
     */
    public List<AwardDto> getAwardListByIdAndStatus(Integer id, Integer status);


    /**
     *  获取最后发送通知的红包id
     * @return
     */
    public Integer getLastAwardIdSendInform(String awardId);

    /**
     *  获取红包快过期消息
     * @return
     */
    public String getAwardCloseToTimeoutMsg();


    /**
     * 获取红包过期剩余时间 单位小时
     * @return
     */
    public Integer getAwardExpiredRemainingTimeUnitHour();

    /**
     * 获取当前轮的总金额
     * @param roundCount
     * @return
     */
    public Integer currentRoundAmount(Integer userId, Integer roundCount);
}
